package jnpf.service;



import jnpf.model.ragFlow.common.DocumentIdsReq;
import jnpf.model.ragFlow.common.IdReq;
import jnpf.model.ragFlow.common.RagFlowApiResult;
import jnpf.model.ragFlow.file.DocumentListRequest;
import jnpf.model.ragFlow.file.DocumentUpdateRequest;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

public interface RagFlowFileService {

    /**
     * 上传文件到指定数据集
     *
     * @param datasetId 数据集ID
     * @param files     要上传的文件列表
     * @return 上传结果
     * @throws Exception 上传过程中可能发生的异常
     */
    RagFlowApiResult uploadFiles(String datasetId, List<MultipartFile> files) throws Exception;

    /**
     * 更新文档配置
     *
     * @param datasetId   数据集ID
     * @param documentId  文档ID
     * @param documentReq 文档更新请求
     * @return 更新结果
     * @throws Exception 更新过程中可能发生的异常
     */
    RagFlowApiResult updateDocument(String datasetId, String documentId, DocumentUpdateRequest documentReq) throws Exception;

    /**
     * 下载文档
     *
     * @param datasetId  数据集ID
     * @param documentId 文档ID
     * @return 文档内容的字节数组
     * @throws Exception 下载过程中可能发生的异常
     */
    byte[] downloadDocument(String datasetId, String documentId) throws Exception;

    /**
     * 获取文档列表
     *
     * @param datasetId 数据集ID
     * @param request   文档列表请求参数
     * @return 文档列表响应
     * @throws Exception 获取过程中可能发生的异常
     */
    RagFlowApiResult listDocuments(String datasetId, DocumentListRequest request) throws Exception;

    /**
     * 删除文档
     *
     * @param datasetId   数据集ID
     * @param documentIds 要删除的文档ID列表
     * @return 删除结果
     * @throws Exception 删除过程中可能发生的异常
     */
    RagFlowApiResult deleteDocuments(String datasetId, IdReq documentIds) throws Exception;

    /**
     * 解析文档
     *
     * @param datasetId   数据集ID
     * @param documentIds 要解析的文档ID列表
     * @return 解析结果
     * @throws Exception 解析过程中可能发生的异常
     */
    RagFlowApiResult parseDocuments(String datasetId, DocumentIdsReq documentIds) throws Exception;

    /**
     * 停止解析文档
     *
     * @param datasetId   数据集ID
     * @param documentIds 要停止解析的文档ID列表
     * @return 操作结果
     * @throws Exception 操作过程中可能发生的异常
     */
    RagFlowApiResult stopParsingDocuments(String datasetId, DocumentIdsReq documentIds) throws Exception;
}
